%{
/* 先包含Sql_Node_Defs.hpp是因为sql_parser.hpp里面的类型未定义，而先包含可以让其编译时不出错 */
#include "Sql_Node_Defs.hpp"
#include "sql_parser.hpp"

/* cstdlib和cstring中的一些函数会用在动作代码中 */
#include <cstdlib>
#include <cstring>
%}

/* 不区分大小写 */
%option case-insensitive
%option noyywrap

/* 给常用的正则表达式起别名 */
WHITE_SPACE      [\ \t\b\f\n]
DIGIT            [0-9]+
ID               [A-Za-z_]+[A-Za-z0-9_]*
DOT              \.
QUOTE            [\'\"]

/* yylval可以认为是sql_parser.hpp中定义的union结构的全局变量 */
%%

{WHITE_SPACE}    ;
CREATE           {
    return CREATE;
}
TABLE            {
    return TABLE;
}
"("              {
    return LBRACE;
}
")"              {
    return RBRACE;
}
","              {
    return COMMA;
}
INT              {
    return INT;
}
CHAR             {
    return CHAR;
}
PRIMARY          {
    return PRIMARY;
}
KEY              {
    return KEY;
}
";"              {
    return SEMICOLON;
}
{DIGIT}+         { 
    yylval.number=atoi(yytext); 
    return NUMBER;
}
{ID}             {
    yylval.cstring=strdup(yytext);
    return ID;
}

%%